$(function () {
    /******************************************初始化******************************************/
    $('.params').css('display', 'none')
    // let engineHttp="http://30.30.30.107:5517"
    const form = layui.form;
    // 数据产品信息
    let productInfo = {};
    // 获取URL中的查询参数部分
    const queryString = window.location.search;
    // 解析查询参数字符串，将其转换为对象
    const urlParams = new URLSearchParams(queryString);
    // 获取id参数的值
    const id = urlParams.get('id');
    let contentId = -1;//数据资源id
    console.log('id', id)
    // 数据通道列表
    let datasourceList = [];
    // 数据资源级联选择器
    // let dataSourceCas = layui.layCascader({
    // 	elem: '#dataSource',
    // 	clearable: true,
    // 	filterable: true,
    // 	placeholder: "请选择数据资源",
    // 	// options: data,
    // 	props: {
    // 		checkStrictly: true
    // 	},
    // });
    // 数据资源远程搜索
    var ins;
    // 模块加载的机制不明白的或者加载不进来的，请参考layui官方文档或者自行百度
    layui.config({base: './../assets/layui/layui_exts/'}).extend({
        selectInput: 'selectInput/selectInput'
    }).use(['form', 'selectInput'], function () {
        var selectInput = layui.selectInput;
        ins = selectInput.render({
            // 容器id，必传参数
            elem: '#dataSource',
            name: 'contentId', // 渲染的input的name值
            placeholder: '请输入资源名称', // 渲染的inputplaceholder值
            remoteSearch: true,// 是否启用远程搜索 默认是false，和远程搜索回调保存同步
            // 解析回调，如果你的异步返回的data不是上述的data格式，请在此回调格式成对应的数据格式，回调参数是异步加载的数据
            parseData: function (data) {
                console.log('解析回调', data)
                let arr = []
                data.forEach(function (item, index) {
                    arr[index] = {value: '', name: ''}
                    arr[index].value = data[index]['id'];
                    arr[index].name = data[index]['contentNickName'] || data[index]['contentName']
                })
                return arr;
            },
            error: function (error) { // 异步加载出错的回调 回调参数是错误msg
                console.log('error', error)
            },
            done: function (data) { // 异步加载成功后的回调 回调参数加载返回数据
                console.log('data', data)
            },
            remoteMethod: function (value, cb) { // 远程搜索的回调函数
                console.log('value', value)
                if (!value) {
                    return cb([]);
                }
                //这里的$.ajax去请求后台拿回数据
                $.ajax({
                    method: 'get',
                    url: window.Http + '/datasourceContent/list/all',
                    headers: {
                        'Authorization': "Bearer " + sessionStorage.getItem('Token')
                    },
                    data: {
                        contentName: value,
                        createUserId: sessionStorage.getItem('UserId'),
                        status: 0
                    },
                    success: function (res) {
                        if (res.code === 200) {
                            const data = res.data
                            return cb(data)
                        } else {
                            layer.msg('搜索数据资源失败')
                        }
                    }
                })
            }

        });
        // 监听select 选择事件
        ins.on('itemSelect(dataSource)', function (obj) {
            contentId = obj.data
            console.log(obj.data);
        });
    })

    // dataSourceCas.changeEvent(function (value, node) {
    // 	console.log('value', value)
    // 	console.log('node', node)
    // })
    // // 数据通道级联选择器
    // let dataChannelCas=layui.layCascader({
    // 	elem: '#dataChannel',
    // 	clearable: true,
    // 	filterable: true,
    // 	// options: data,
    // 	props: {
    // 		checkStrictly: true
    // 	},
    // });

    // 分类级联选择器 多选
    let typeIdListCas = layui.layCascader({
        elem: '#typeIdListCas',
        clearable: true,
        placeholder: "请选择分类",
        props: {
            multiple: true,
            checkStrictly: true,
            lazy: true,
            lazyLoad(node, resolve) {
                console.log('node', node)
                console.log('(node.value===10001||node.value===10000)', (node.value === 10001 || node.value === 10000))
                listFieldType({
                    keyword: null,
                    parentId: (node.value === 10001 || node.value === 10000) ? 0 : node.value,
                    systemCatalogId: null,
                    catalogTypes: '0,1,2'
                }).then(res => {
                    if (res.code === 200) {
                        const nodes = res.rows.map(item => {
                            return {
                                value: item.id,
                                label: item.fieldName,
                                leaf: !item.exitSon
                            }
                        });
                        resolve(nodes)
                    }
                })
            }
        }
    })
    // 关键词级联选择器
    let keywordCas = layui.layCascader({
        elem: '#keywordCas',
        clearable: true,
        filterable: true,
        // filterMethod:function (node,keyword){
        // 	console.log('keyword', keyword);
        // 	keywordListReq(keyword).then(res=>{
        // 		const optArr=res.data.map((item,index)=>{
        // 			return {value:index,label:item}
        // 		})
        // 		keywordCas.setOptions(optArr)
        // 	})
        // 	return true
        // },
        // options: data,
        props: {
            multiple: true,
            checkStrictly: true
        },
        placeholder: "请选择关键字",
        // value: selectTypeIdList
    });

    // 申购规则级联选择器
    let buyRuleCas = layui.layCascader({
        elem: '#buyRuleCas',
        clearable: true,
        filterable: true,
        // options: data,
        placeholder: "请选择申购规则",
        props: {
            checkStrictly: true
        },
        // value: selectTypeIdList
    });
    buyRuleCas.changeEvent(function (value, node) {
        console.log('value', value)
        console.log('node', node)
    })
    // 可见规则级联选择器
    let controlRuleCas = layui.layCascader({
        elem: '#controlRuleCas',
        clearable: true,
        filterable: true,
        // options: data,
        placeholder: "请选择可见规则",
        props: {
            checkStrictly: true
        },
        // value: selectTypeIdList
    });
    controlRuleCas.changeEvent(function (value, node) {
        console.log('value', value)
        console.log('node', node)
    })
    // 定制产品申请下拉级联选择器-单选
    let customRequestCas = layui.layCascader({
            elem: '#customRequestId',
            clearable: true,
            filterable: true,
            // options: data,
            placeholder: "请选择对应定制申请",
            props: {
                checkStrictly: true
            },
        }
    )
    customRequestCas.changeEvent(function (value, node) {
        console.log('value', value)
        console.log('node', node)
        $.ajax({
            url: window.Http + `/CustomizeRequest/${value}`,
            type: 'GET',
            headers: {
                'Authorization': "Bearer " + sessionStorage.getItem('Token')
            },
            success: function (res) {
                if (res.code === 200) {
                    const contentId = res.data.contentId
                    console.log('contentId', contentId)
                    if (contentId) {
                        const contentName = res.data.datasourceContent.contentName
                        console.log('contentName', contentName)
                        // dataSourceCas.setOptions([{value: contentId, label: contentName}])
                        // dataSourceCas.setValue(contentId)
                        // var selectValue = ins.getValue();
                        ins.addSelect([
                            {value: contentId, name: contentName}
                        ], false);
                        form.val('productRegisterForm', {
                            'contentId': contentName,
                        })
                        ins.setValue(contentId, true);
                        $('input[name=contentId]').prop("disabled", true);
                        const value = ins.getValue()
                        console.log('value', value)
                    } else {
                        $('input[name=contentId]').prop("disabled", false);
                        form.val('productRegisterForm', {
                            'contentId': '',
                        })
                    }
                } else {
                    layer.msg(res.msg)
                }
            }
        })
    })
    // 申购规则id
    let buyRuleId = 0;
    // 可见规则id
    let controlRuleId = 0;
    // 离线数据产品数据url
    let offlineFileUrl = ''
    // 套餐产品的产品列表
    let productLinkList = []
    // 输入参数数组
    let dataproductParamList = []
    // 输出参数数组
    let exportParam = []
    // 申购规则radio
    let buyRuleType = 2
    // 可见规则radio
    let controlRuleType = 2
    //上传图标文件
    let IconUrl = "";
    // 生成方式
    let generationMode = 0
    // 数据产品修改
    if (id) {
        let loading = layer.load(1);
        //获取数据产品详情
        $.ajax({
            timeout: 30000,
            url: window.Http + "/dataProduct/" + id,
            type: 'GET',
            headers: {
                'Authorization': "Bearer " + sessionStorage.getItem('Token')
            },
            success: function (res) {
                layer.close(loading);
                if (res.code === 200) {
                    productInfo = res.data;
                    console.log('productInfo', productInfo)
                    // try {
                    // 	// 尝试解析输出参数 JSON 字符串
                    // 	productInfo.exportParam=JSON.parse(productInfo.exportParam)
                    // 	console.log('第一次渲染输出参数')
                    // 	productInfo.exportParam.forEach((item,index)=>{
                    // 		console.log('参数表格渲染',)
                    // 		let html=inputParamTableRow(index+1,item);
                    // 		form.render($(`.output${index+1}`))
                    // 		$('#exportParams tbody').append(html);
                    // 	})
                    // } catch (error) {
                    // 	layer.msg('输入参数格式不正确')
                    // }
                    // console.log('第一次渲染输入参数')
                    // productInfo.dataproductParamList.forEach((item, index) => {
                    // 	console.log('参数表格渲染',)
                    // 	let html = outputParamTableRow(index + 1, item);
                    // 	$('#dataproductParamList tbody').append(html);
                    // 	form.render($(`.input${index + 1}`))
                    // })

                    // 禁止修改数据通道
                    $('.datasource input[name=contentId]').attr("disabled", true);
                    contentId = productInfo.contentId;
                    $("#productIconUrl").attr("src", productInfo.iconUrl);
                    productInfo.isAuth = productInfo.isAuth ? '1' : '0';
                    form.val("productRegisterForm", productInfo);
                    // TODO 分类赋值
                    // keywordCas.setValue()
                    typeIdListCas.setValue(productInfo.typeIdList)
                    // 规则类型赋值
                    $(".ruleTypeBox").find(".ruleChoose").addClass("disabledNone")
                    if (productInfo.buyRuleId === -1) {//无条件使用
                        form.val('productRegisterForm', {
                            "ruleType": "4"
                        })
                        $('.ruleTypeBox').siblings(".ruleChoose").removeClass("disabledNone");
                    } else if (productInfo.buyRuleId === 0) {//继承数据通道
                        form.val('productRegisterForm', {
                            "ruleType": "1"
                        })
                        $('.ruleTypeBox').siblings(".ruleChoose").removeClass("disabledNone");
                    } else {//其他值
                        form.val('productRegisterForm', {
                            "ruleType": "2"
                        })
                        $('.ruleTypeBox .ruleChooseSelect').removeClass("disabledNone")
                        buyRuleCas.setValue(productInfo.buyRuleId)
                        controlRuleCas.setValue(productInfo.controlRuleId)
                    }
                    // 数据产品类型
                    if (productInfo.sourceType === 1) {//在线产品
                        const contentName = productInfo.datasourceContent.contentNickName === '' ? productInfo.datasourceContent.contentName : productInfo.datasourceContent.contentNickName
                        ins.addSelect([
                            {value: contentId, name: contentName}
                        ], false);
                        form.val('productRegisterForm', {
                            'contentId': contentName,
                        })
                        // ins2.setValue(productInfo.contentName);
                    } else if (productInfo.sourceType === 4) {//离线产品
                        $('.datasource').css('display', 'flex')
                        $('.inherit').css('display', 'none')
                        $('.setProductBox').css('display', 'none')
                        // $('.params').css('display','flex')
                        $('.paramsSet').css('display', 'block')
                        $('.params').css('display', 'none')
                        $(".online").css('display', 'none')
                        $(".offline").css('display', 'block')
                    } else if (productInfo.sourceType === 2) {//套餐产品
                        // $('.params').css('display','none')
                        // $('.paramsSet').css('display', 'none')
                        $('.datasource').css('display', 'none')
                        // 隐藏规则
                        $('.inherit').css('display', 'none')
                        $('.setProductBox').css('display', 'block')
                        productLinkList = productInfo.productLinkList
                        productLinkTableRender(productLinkList)
                    }
                } else {
                    layer.msg(res.msg);
                }
            }
        })
    }
    /*******************事件处理部分*******************/
    // 切换生成方式
    form.on('select(generationMode)', function (data) {
        generationMode = Number(data.value)
        if (generationMode === 0) {
            $('#customRequestDiv').addClass("disabledNone")
        } else if (generationMode === 3) {
            $('#customRequestDiv').removeClass("disabledNone")
        }
    });
    // 切换产品类型
    layui.form.on('radio(sourceType)', function (data) {
        let index = data.value;
        console.log('index', index)
        // $('.definition').eq(index).addClass("selShow").siblings(".definition").removeClass('selShow');
        if (Number(index) === 1) {//在线数据产品
            // $('.params').css('display','block')
            $('.datasource').css('display', 'flex')
            $('.inherit').css('display', 'block')
            $('.setProductBox').css('display', 'none')
            // $('.params').css('display','flex')
            $(".online").css('display', 'block')
            $(".offline").css('display', 'none')
        } else if (Number(index) === 4) {//离线数据产品
            // $('.params').css('display','block')
            $('.datasource').css('display', 'flex')
            $('.inherit').css('display', 'none')
            $('.setProductBox').css('display', 'none')
            // $('.params').css('display','flex')
            $(".online").css('display', 'none')
            $(".offline").css('display', 'block')
        } else if (Number(index) === 2) {//套餐数据产品
            $('.params').css('display', 'none')
            // $('.paramsSet').css('display', 'none')
            $('.datasource').css('display', 'none')
            // 隐藏规则
            $('.inherit').css('display', 'none')
            $('.setProductBox').css('display', 'block')
        }
    });
    $('#customFile').change(function (event) {
        for (let i = 0; i < event.target.files.length; i++) {
            // 获取input上传附件
            let file = event.target.files[i];
            uploadFile(file).then(res => {
                IconUrl = res.url;
                $("#productIconUrl").attr("src", IconUrl);
            });
        }
    });
    // 上传离线数据文件
    $('#sourceFile').change(function (event) {
        for (let i = 0; i < event.target.files.length; i++) {
            // 获取input上传附件
            let file = event.target.files[i];
            uploadFile(file).then(res => {
                offlineFileUrl = res.url;
            });
            console.log('offlineFileUrl', offlineFileUrl)
        }
    });
    // 参数文件url
    let appProductUrl = ''
    // 上传参数文件
    $('#paramsFile').change(function (event) {
        for (let i = 0; i < event.target.files.length; i++) {
            // 获取input上传附件
            let file = event.target.files[i];
            uploadFile(file).then(res => {
                appProductUrl = res.url;
            });
        }
    });
    // 切换可见规则控制管理
    layui.form.on('radio(controlRuleType)', function (data) {
        controlRuleType = data.value
        $(".controlRuleTypeBox").find(".ruleChoose").addClass("disabledNone")
        if (data.value === "2") {//重新选择
            $(this).siblings(".ruleChooseSelect").removeClass("disabledNone");
            controlRuleId = controlRuleCas.getCheckedValues() || -1
            console.log('controlRuleId', controlRuleId)
            // buyRuleId=buyRuleCas.getCheckedValues()|| -1
        } else if (data.value === "3") {//重新制定
            $(this).siblings(".ruleChoose").removeClass("disabledNone");
        } else if (data.value === "4") {//无条件使用
            // buyRuleId = -1;
            controlRuleId = -1
            $(this).siblings(".ruleChoose").removeClass("disabledNone");
        } else {//继承数据通道控制
            // buyRuleId = 0;
            controlRuleId = 0
            console.log('controlRuleId', controlRuleId)
            $(this).siblings(".ruleChoose").removeClass("disabledNone");
        }
    });
    // 切换申购规则控制管理
    layui.form.on('radio(buyRuleType)', function (data) {
        buyRuleType = data.value
        $(".buyRuleTypeBox").find(".ruleChoose").addClass("disabledNone")
        if (data.value === "2") {//重新选择
            $(this).siblings(".ruleChooseSelect").removeClass("disabledNone");
            // controlRuleId=controlRuleCas.getCheckedValues()|| -1
            buyRuleId = buyRuleCas.getCheckedValues() || -1
        } else if (data.value === "3") {//重新制定
            $(this).siblings(".ruleChoose").removeClass("disabledNone");
        } else if (data.value === "4") {//无条件使用
            buyRuleId = -1;
            // controlRuleId=-1
            $(this).siblings(".ruleChoose").removeClass("disabledNone");
        } else {//继承数据通道控制
            buyRuleId = 0;
            // controlRuleId=0
            $(this).siblings(".ruleChoose").removeClass("disabledNone");
        }
    });

    // 提交按钮
    $("body").on("click", '#submitForm', function (e) {
        e.preventDefault();
        let params;
        let formData = form.val("productRegisterForm");
        if (productInfo) {
            for (let key in formData) {
                productInfo[key] = formData[key];
            }
            params = productInfo;
        } else {
            params = formData;
        }
        params.isAuth = params.isAuth !== '0';
        console.log('params.isAuth', params.isAuth)
        console.log('formData', formData)
        // 输入参数表格
        // const inputRows = $('#dataproductParamList').find('tbody tr');
        // if (inputRows.length>0){
        // 	dataproductParamList=[]
        // 	inputRows.each(function (index,row){
        // 		let obj=getParamTableRowValue(row);
        // 		dataproductParamList.push(obj)
        // 		console.log('dataproductParamList', dataproductParamList)
        // 	})
        // 	params.dataproductParamList=dataproductParamList
        // }
        // // 输出参数表格
        // const outPutrows = $('#exportParams').find('tbody tr');
        // if (outPutrows.length>0){
        // 	exportParam=[]
        // 	outPutrows.each(function (index,row){
        // 		let obj=getParamTableRowValue(row);
        // 		exportParam.push(obj)
        // 		console.log('exportParam', exportParam)
        // 	})
        // 	params.exportParam=JSON.stringify(exportParam)
        // }
        // 套餐产品表格
        // 找到表格中的所有行
        const rows = $('#productSet').find('tbody tr');
        // 遍历每一行
        rows.each(function (index, row) {
            const indexValue = $(row).find('.index').text() - 1;
            console.log('indexValue', indexValue)
            // 找到当前行中的 packagePriceRatio 元素
            let packagePriceRatio = $(row).find('.layui-input[name="packagePriceRatio"]').val();
            console.log('packagePriceRatio', packagePriceRatio)
            if (packagePriceRatio > 100 || packagePriceRatio < 0) {
                layer.msg('价格占比不能超过100%')
            }
            console.log('productLinkList', productLinkList)
            productLinkList[indexValue].packagePriceRatio = packagePriceRatio
            // 打印或使用 packagePriceRatio 的值
            console.log("Row " + (index + 1) + ": " + packagePriceRatio);
            console.log('productLinkList', productLinkList)
        });
        // 如果是套餐产品则传子产品列表
        if (params.sourceType === '2') {
            params.productLinkList = productLinkList
        } else if (params.sourceType === '4') {//离线数据产品
            if (offlineFileUrl) {
                params.offlineFileUrl = offlineFileUrl
            } else {
                layer.msg('数据文件未上传或上传失败')
            }
        }
        params.keywordList = keywordCas.getCheckedNodes().map(item => item.data.label)
        params.status = 2;
        console.log('提交', params)
        // 处理分类参数
        params.typeIdList = typeIdListCas.getCheckedValues();
        params.appProductUrl = appProductUrl;
        handleParams(params);
    })
    //保存
    $("body").on("click", '#saveForm', function (e) {
        e.preventDefault();
        let formData = layui.form.val("productRegisterForm");
        let params;
        if (productInfo) {
            for (let key in formData) {
                productInfo[key] = formData[key];
            }
            params = productInfo;
        } else {
            params = formData;
        }
        // if (params.dataproductParamList!==''){
        // 	console.log('存在',params.dataproductParamList)
        // 	try {
        // 		// 尝试解析 JSON 字符串
        // 		params.dataproductParamList = JSON.parse(params.dataproductParamList);

        // 		// 如果 JSON 解析成功，可以继续执行其他操作
        // 		console.log(params.dataproductParamList);
        // 	} catch (error) {
        // 		layer.msg('输入参数格式不正确')
        // 	}
        // }else {
        // 	console.log('不存在',params.dataproductParamList)
        // 	delete params.dataproductParamList
        // }

        if (params.sourceType === '4') {
            params.offlineFileUrl = offlineFileUrl
        }
        params.typeIdList = typeIdListCas.getCheckedValues();
        params.status = -1;
        handleParams(params)
    })
    // 产品序号
    let index = 0;
    // 套餐产品部分 增加一行
    $('#productSet').on('click', '.addProductItem', function () {
        console.log('套餐产品部分 增加一行', index)
        index = productLinkList.length;
        // 套餐产品的产品列表子项
        let productLinkItem = {}
        index += 1;
        let html = `
		<tr>
			<td class="index">${index}</td>
			<td>
				<input type="text" id=${index.toString()}>
			</td>
			<td>
				<input type="number" name="packagePriceRatio" required lay-verify="packagePriceRatio" placeholder="%" autocomplete="off" class="layui-input">
			</td>
			<td>
			<button class="layui-btn addProductItem">新增</button>
			<button class="layui-btn deletedProductItem">删除</button>
			</td>
		</tr>
		`
        $('#productSet tbody').append(html);
        let productCas = layui.layCascader({
            elem: `#${index}`,
            clearable: true,
            // options: data,
            props: {
                checkStrictly: true
            },
            // value: selectTypeIdList
        });
        productListReq()
            .then(function (res) {
                // console.log("成功：", res.data);
                productCas.setOptions(dataFormat(res.data, 'id', 'productName'))
            })
        productCas.changeEvent(function (value) {
            productLinkItem.productSonId = value;
        })
        // productLinkItem.productSonId=productCas.getCheckedValues()
        productLinkItem.packagePriceRatio = form.val('packagePriceRatio').packagePriceRatio
        productLinkList.push(productLinkItem)
        console.log('productLinkList', productLinkList)
    })
    // 套餐产品部分 删除一行
    $('#productSet').on('click', '.deletedProductItem', function () {
        // 找到当前点击的按钮所在的行
        const $row = $(this).closest('tr');

        // 获取行中的index值
        const index = $row.find('.index').text();
        // 使用filter方法删除特定的数据项
        productLinkList.splice(index - 1, 1)
        // 现在你可以使用index进行需要的操作
        console.log('要删除的行的index：', index);
        console.log('productLinkList', productLinkList)
        // 在这里执行删除行的操作
        $row.remove();
    })
    let inputParamsIndex = 0;
    // 输入参数部分 新增一行
    $('#dataproductParamList').on('click', '.addInputParamItem', function () {
        console.log('点击新增一行')
        inputParamsIndex += 1;
        let html = inputParamTableRow(inputParamsIndex)
        $('#dataproductParamList tbody').append(html);
        form.render($(`.input${inputParamsIndex}`))
    })
    // 输入参数部分 删除一行
    $('#dataproductParamList').on('click', '.deleteInputParamItem', function () {
        console.log('delete',)
        // 找到当前点击的按钮所在的行
        const $row = $(this).closest('tr');
        // 获取行中的index值
        const index = $row.find('.index').text();
        // 现在你可以使用index进行需要的操作
        console.log('要删除的行的index：', index);
        // 在这里执行删除行的操作
        $row.remove();
    })
    let outputParamsIndex = 0;
    // 输出参数部分 新增一行
    $('#exportParams').on('click', '.addOutputParamItem', function () {
        outputParamsIndex += 1;
        console.log('输出参数新增')
        let html = outputParamTableRow(outputParamsIndex)
        $('#exportParams tbody').append(html);
        form.render($(`.output${outputParamsIndex}`))
        // form.render('select','chooseType');
        // form.render('select','relationshipType');
    })
    // 输出参数部分 刪除一行
    $('#exportParams').on('click', '.deleteOutputParamItem', function () {
        console.log('delete',)
        // 找到当前点击的按钮所在的行
        const $row = $(this).closest('tr');

        // 获取行中的index值
        const index = $row.find('.index').text();
        // 现在你可以使用index进行需要的操作
        console.log('要删除的行的index：', index);
        // 在这里执行删除行的操作
        $row.remove();
    })

    /********************功能函数部分****************************************/

    //上传图标
    function uploadFile(file) {
        const form = new FormData();
        form.append('file', file);
        return new Promise(function (resolve, reject) {
            $.ajax({
                timeout: 30000,
                type: 'POST',
                url: window.Http + "/common/upload",
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data: form,
                mimeType: "multipart/form-data",
                contentType: false,
                processData: false,
                dataType: "json",
                success: function (res) {
                    if (res.code === 200) {
                        resolve(res); // 成功时将响应传递给调用者
                    } else {
                        layer.msg(res.msg);
                        reject(new Error("请求失败")); // 失败时将错误传递给调用者
                    }

                },
                error: function (xhr, status, error) {
                    reject(new Error("请求出错：" + error)); // 失败时将错误传递给调用者
                }
            })
        })
    }

    // 获取数据资源下拉列表
    /**
     * 函数描述
     * @return 返回值 数据资源列表
     * @example
     */

    function dataSourceListReq() {
        $.ajax({
            timeout: 30000,
            url: window.Http + "/datasourceContent/list/all",
            type: 'GET',
            headers: {
                'Authorization': "Bearer " + sessionStorage.getItem('Token')
            },
            data: {status: 0, createUserId: sessionStorage.getItem('UserId')},
            success: function (res) {
                if (res.code === 200) {
                    datasourceList = res.data;
                }
            }
        })
        return datasourceList;
    }

    dataSourceListReq()

    // 关键词列表
    function keywordListReq(keyword) {
        // 请求关键字
        return new Promise(function (resolve, reject) {
            $.ajax({
                timeout: 30000,
                url: window.Http + "/system/field/keyword",
                type: 'GET',
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data: {keyword},
                success: function (res) {
                    if (res.code === 200) {
                        // keywordCas.setOptions(dataFormat(res.data.keywordList,'id','resourceName'))
                        resolve(res)
                    } else {
                        layer.msg('获取关键词列表失败')
                        reject(new Error("请求失败")); // 失败时将错误传递给调用者
                    }
                }
            })
        })
    }

    keywordListReq('').then(res => {
        const optArr = res.data.map((item, index) => {
            return {value: index, label: item}
        })
        keywordCas.setOptions(optArr)
    })


    // 产品列表请求
    function productListReq() {
        return new Promise(function (resolve, reject) {
            $.ajax({
                timeout: 30000,
                url: window.Http + "/dataProduct/list/all",
                type: 'GET',
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data: {
                    ownUserId: sessionStorage.getItem('userId'),
                    sourceTypeList: '1,4'//数据产品
                },
                success: function (res) {
                    if (res.code === 200) {
                        resolve(res); // 成功时将响应传递给调用者
                    } else {
                        reject(new Error("请求失败")); // 失败时将错误传递给调用者
                    }
                },
                error: function (xhr, status, error) {
                    reject(new Error("请求出错：" + error)); // 失败时将错误传递给调用者
                }
            })
        })
    }

    // 分类下拉请求
    function listFieldType(params) {
        return new Promise(function (resolve, reject) {
            $.ajax({
                timeout: 30000,
                url: window.Http + '/system/field/list',
                type: "GET",
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data: params,
                success: function (res) {
                    if (res.code === 200) {
                        resolve(res); // 成功时将响应传递给调用者
                    } else {
                        reject(new Error("请求失败")); // 失败时将错误传递给调用者
                    }
                },
                error: function (xhr, status, error) {
                    reject(new Error("请求出错：" + error)); // 失败时将错误传递给调用者
                }
            })
        })
    }

    /**
     * 函数描述
     * @return 返回值
     * @example
     * @param params
     */

    //处理参数并提交
    function handleParams(params) {
        //目录暂时不传
        // params.typeIdList = selectTypeIdList;
        //产品生成方式
        // params.generationMode = 0;
        // params.createId = sessionStorage.getItem('UserId');
        // 创建者类型为自己创建
        params.createType = 0;
        params.iconUrl = IconUrl || params.iconUrl;
        if (params.sourceType === '1') {
            // params.controlRuleId = 0;
            // params.contentId = dataSourceCas.getCheckedValues()
            params.contentId = contentId === -1 ? ins.getValue() : contentId;
            console.log('params.contentId', params.contentId)
        }
        // else if (params.sourceType==='2'){
        // 	params.controlRuleId = -1;
        // }else if (params.sourceType==='4'){
        // 	params.controlRuleId = -1;
        // }
        // buyRuleId=buyRuleCas.getCheckedValues()|| -1;
        if (buyRuleType === '2') {//重新选择
            buyRuleId = buyRuleCas.getCheckedValues() || -1;
        }
        if (controlRuleType === '2') {//重新选择
            controlRuleId = controlRuleCas.getCheckedValues() || -1;
            console.log('controlRuleId', controlRuleId)
        }
        params.customRequestId = customRequestCas.getCheckedValues()
        params.buyRuleId = buyRuleId;
        params.controlRuleId = controlRuleId;
        console.log('controlRuleId', controlRuleId)
        console.log('params.controlRuleId', params.controlRuleId)
        // 离线产品且需要监管时连接监管程序加密
        if (params.isControl == 1 && params.sourceType == 4 && params.offlineFileUrl && params.buyRuleId !== -1) {
            let encryptParams = {
                "Cmd": "OffEncrypt",
                "fileUrl": offlineFileUrl,
                "encryption": null,
                "password": null,
                "ConfirmPermission": false,
            }
            let buyData = JSON.parse(buyRuleCas.getCheckedNodes().data.data.priceRule)
            console.log('buyData', buyData)
            encryptParams.encryption = buyData.security.encrypt.way.select === "random" ? "random" : "customize"
            encryptParams.ConfirmPermission = buyData.security.confirm.select === '1';
            if (encryptParams.encryption === 'customize') {

                encryptParams.password = buyData.security.encrypt.way.password;
            }
            // 请求监管程序加密
            window.ws = new WebSocket(window.monitorWebsocket);
            window.ws.onopen = function () {
                params = encryptSend(encryptParams, params)
            }
        }
        if (params.id) {//修改
            requestAjax(params, "PUT", Number((params.sourceType)))
        } else {//新增
            requestAjax(params, "POST", Number((params.sourceType)));
        }
    }

    // 数据产品修改或新增请求
    //Type新增POST，修改PUT
    function requestAjax(params, Type) {
        $.ajax({
            timeout: 30000,
            url: window.Http + "/dataProduct",
            type: Type,
            headers: {
                'Authorization': "Bearer " + sessionStorage.getItem('Token')
            },
            data: JSON.stringify(params),
            contentType: "application/json",
            success: function (res) {
                if (res.code === 200) {
                    layer.msg("操作成功");
                    console.log('res', res)
                    const customProductId = res.data.id
                    // 如果是定制产品
                    if (params.customRequestId) {
                        const productName = params.productName;
                        const requestId = params.customRequestId;
                        // setTimeout(function(){
                        // 	let index = parent.layer.getFrameIndex(window.name);
                        // 	//执行关闭
                        // 	parent.layer.close(index);
                        // 	//window.parent.location.reload();
                        // },1000)
                        layer.open({
                            type: 2,
                            title: "确定产品订单信息",
                            area: ['800px', '550px'],
                            content: `../../popupPage/auditPurchasePop.html?requestId=${requestId}&&productName=${productName}&&id=${customProductId}`,
                            zIndex: layer.zIndex + 11, //重点1
                            success: function (layero) {
                                layer.setTop(layero); //重点2
                            }
                        });
                    } else {
                        setTimeout(function () {
                            let index = parent.layer.getFrameIndex(window.name);
                            //执行关闭
                            parent.layer.close(index);
                            //window.parent.location.reload();
                        }, 1000)
                    }

                } else if (res.msg) {
                    layer.msg(res.msg);
                } else {
                    layer.msg("操作失败");
                }
            }
        })
    }

    // 申购规则请求
    function buyRuleReq() {
        // 请求申购规则列表
        $.ajax({
            timeout: 30000,
            url: window.Http + "/system/buy/list/all",
            type: 'GET',
            headers: {
                'Authorization': "Bearer " + sessionStorage.getItem('Token')
            },
            data: {
                systemBuyType: '1'
            },
            success: function (res) {
                if (res.code === 200) {
                    buyRuleCas.setOptions(dataFormat(res.rows, 'id', 'systemBuyName'))
                } else {
                    layer.msg(res.msg)
                }
            }
        })
    }

    buyRuleReq()

    // 可见规则请求
    function controlRuleReq() {
        // 请求申购规则列表
        $.ajax({
            timeout: 30000,
            url: window.Http + "/system/control/list/all",
            type: 'GET',
            headers: {
                'Authorization': "Bearer " + sessionStorage.getItem('Token')
            },
            data: {
                systemBuyType: '1'
            },
            success: function (res) {
                if (res.code === 200) {
                    controlRuleCas.setOptions(dataFormat(res.data, 'id', 'systemControlName'))
                } else {
                    layer.msg(res.msg)
                }
            }
        })
    }

    controlRuleReq()
    // 数据转换成级联列表需要的样式
    // data:原始数组，value:绑定的值（id），label：标签显示值，返回正确格式数组
    function dataFormat(data, value, label, secondLabel) {
        let arr = []
        data.forEach(function (item, index) {
            arr[index] = {value: '', label: ''}
            arr[index].value = data[index][value];
            arr[index].label = data[index][label] || data[index][secondLabel];
            arr[index].data = data[index];
        })
        return arr;
    }

    /**
     * @description:函数描述 请求承接定制下拉列表
     * @return {Promise} 请求的结果
     */
    function customListReq() {
        return new Promise(function (resolve, reject) {
            $.ajax({
                url: window.Http + '/CustomizeRequest/list/all',
                type: 'get',
                headers: {
                    'Authorization': "Bearer " + sessionStorage.getItem('Token')
                },
                data: {
                    isClaim: 1
                },
                success: function (res) {
                    if (res.code === 200) {
                        resolve(res)
                    } else {
                        reject(new Error('请求错误'))
                        layer.msg(res.msg)
                    }
                }
            })
        })
    }


    /**
     * @description:请求监管程序加密 websocket发送消息和处理返回消息
     * @return 返回值
     * @param encryptParams
     * @param params
     */
    function encryptSend(encryptParams, params) {
        console.log('发生消息', encryptParams)
        window.ws.send(JSON.stringify(encryptParams))
        window.ws.onmessage = function (MessageEvent) {
            console.log('MessageEvent.data', MessageEvent.data)
            if (MessageEvent.data) {
                const resData = JSON.parse(MessageEvent.data);
                console.log('resData', resData)
                if (resData.Cmd === 'OffEncryptRet' && resData.Code === 200) {
                    if (resData.Data && resData.Data.Url) {
                        // offlineFileUrl = resData.Data.Url;
                        params.offlineFileUrl = resData.Data.Url;
                    } else {
                        layer.msg('连接监管程序加密失败')
                    }
                }
            }
            return params;
        }
    }

    /**
     * @description:函数描述 判断是否是JSON 并返回js对象
     * @return Object
     * @param obj
     */

    function isJSON(obj) {
        try {
            return JSON.parse(obj);
        } catch (e) {
            return obj;
        }
    }

    // 初始化定制请求下拉列表
    customListReq().then(res => {
        // console.log('res', res)
        if (res.data && res.data.length > 0) {
            const data = res.data.filter(item => item.isClaimStatus === 2);

            console.log('data', data)
            customRequestCas.setOptions(dataFormat(data, 'id', 'name'))
        }
    })
})
